'''题目描述
如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字，那么我们就说这个数是K好数。
求L位K进制数中K好数的数目。例如K = 4，L = 2的时候，
所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大，请你输出它对1000000007取模后的值。
输入描述 输入包含两个正整数，K和L。
输出描述 输出一个整数，表示答案对1000000007取模后的值。
输入样例 4 2
输出样例 7
对于30%的数据，KL <= 106；
对于50%的数据，K <= 16, L <= 10；
对于100%的数据，1 <= K, L <= 100。'''

K, L = map(int, input().split())
count = 0
# dp[i][j]表示i + 1位上存放j的方法个数。
dp = [[0 for _ in range(K)] for _ in range(L)]
# 当只有一位时不管这位放哪个数字都只有一种方法
for i in range(0, K):
    dp[0][i] = 1
# 当位数大等2位时
for i in range(1, L):
    # 以2为数为例，j为十位，m为个位
    for j in range(K):
        for m in range(K):
            # 不相邻才能存放
            if abs(j - m) != 1:
                # 当前位数的放j情况的总个数 = 当前位置放j的个数 + 上一位置放[0,k)的总个数
                dp[i][j] = dp[i][j]+dp[i-1][m]
                dp[i][j] %= 1000000007
    # 不断递归下去，如三位数放k进制的个数 = 三位数的最高位（看成十位）放k进制的个数+两位数（看成一个整体为个位）放k进制的个数

# L位数K好数的总个数
# i从1开始排除L位为最高位放0的情况
for i in range(1, K):
    count += dp[L-1][i]
    count %= 1000000007
print(count)